package com.example.spring_aop;

import com.example.spring_aop.controller.TestController;
import com.example.spring_aop.proxy.HouseSubject;
import com.example.spring_aop.proxy.RealHouseSubject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

@SpringBootApplication
public class SpringAopApplication {

	public static void main(String[] args) {
		ApplicationContext context = SpringApplication.run(SpringAopApplication.class, args);

//		// 设置spring.aop.proxy-target-class=false
//		// 测试代理类的情况，结论：CGLib 代理
//		TestController bean = context.getBean(TestController.class);
//		System.out.println(bean.getClass().toString());
//
//		// 测试代理接口，结论：jdk代理
//		// 修改代码内容，给 RealHouseSubject 添加了@Component 注解
		// 把下面接口改成类，会报错
//		HouseSubject bean1 = (HouseSubject) context.getBean("realHouseSubject");
//		System.out.println(bean1.getClass().toString());


		// 设置spring.aop.proxy-target-class=true (默认情况)
		// 测试代理类的情况，结论：CGLib 代理
		TestController bean = context.getBean(TestController.class);
		System.out.println(bean.getClass().toString());

		// 测试代理接口，结论：CGLib 代理
		// 修改代码内容，给 RealHouseSubject 添加了@Component 注解
		// 把下面接口改成类，代码不会报错
		HouseSubject bean1 = (HouseSubject) context.getBean("realHouseSubject");
		System.out.println(bean1.getClass().toString());
	}

}
